package cn.nbt.busManage.service.impl;

import cn.nbt.busManage.model.dto.RoleDto;
import cn.nbt.busManage.model.entity.Role;
import cn.nbt.busManage.dao.repository.RoleRepository;
import cn.nbt.busManage.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@SuppressWarnings("JavadocDeclaration")
@Service
@Transactional
public class IRoleService implements RoleService {

    @Autowired
    private RoleRepository roleRepository;

    /**
     * 查询所有角色信息
     * @return
     */
    @Override
    public List<RoleDto> findAll(){
       List<Role> all = roleRepository.findAll();
       List<RoleDto> roleDtos = new ArrayList<>();
       for (Role role : all){
           RoleDto roleDto = new RoleDto(role);
           roleDtos.add(roleDto);
       }
       return roleDtos;
   }

    /**
     * 根据角色名称查询
     * @param roleName 角色名称
     * @return 角色信息
     */
   @Override
    public List<RoleDto> findByQuery(String roleName){
       List<Role> roles = roleRepository.findByRoleName(roleName);
       ArrayList<RoleDto> roleDtos = new ArrayList<>();
       for (Role r : roles){
           RoleDto roleDto = new RoleDto(r);
           roleDtos.add(roleDto);
       }
       return roleDtos;
   }

    /**
     * 删除角色信息
      * @param id 角色id
     */
   @Override
    public void delete(Integer id) {
        roleRepository.deleteById(id);
    }

    /**
     * 添加角色信息
     * @param roleDto 角色信息
     */
    @Override
    public void add(RoleDto roleDto) {
        Role role = new Role();
        role.setId(roleDto.getId());
        role.setRoleName(roleDto.getRoleName());
        role.setStatus(roleDto.getStatus());
        roleRepository.save(role);
    }

    /**
     * 更新角色信息
     * @param roleDto 角色信息
     */
    @Override
    public void update(RoleDto roleDto) {
        Role role = new Role();
        role.setId(roleDto.getId());
        role.setRoleName(roleDto.getRoleName());
        role.setStatus(role.getStatus());
        roleRepository.updateRole(role.getRoleName(), role.getStatus(), role.getId());
    }

    /**
     * 根据id查询数据
     * @param id
     * @return
     */
    @Override
    public RoleDto findById(Integer id) {
        Optional<Role> byId = roleRepository.findById(id);
        if(byId.isEmpty()){
            throw new RuntimeException("该角色不存在");
        }
        RoleDto roleDto = new RoleDto(byId.get());
        return roleDto;
    }

}
